/**
 * by 菲鸽 on 2024-03-06
 * 路由拦截，通常也是登录拦截
 * 可以设置路由白名单，或者黑名单，看业务需要选哪一个
 * 我这里应为大部分都可以随便进入，所以使用黑名单
 */
// import { useUserStore } from '@/stores';
import { useMenu } from '@/stores/menu';
// import { getNeedLoginPages, needLoginPages as _needLoginPages } from '@/utils';
import cache from '@/utils/cache';
import { getTreeItem } from '@/utils/util';

// TODO Check
// const loginRoute = '/pages/login/index';

// const isLogined = () => {
//   const userStore = useUserStore();
//   return userStore.token;
// };

// const isDev = import.meta.env.DEV;

// 黑名单登录拦截器 - （适用于大部分页面不需要登录，少部分页面需要登录）
const navigateToInterceptor = {
  // 注意，这里的url是 '/' 开头的，如 '/pages/index/index'，跟 'pages.json' 里面的 path 不同
  invoke({ url }: { url: string }) {
    const pages = getCurrentPages();
    // 修复报错 导致的 首页返回不能退出应用
    let u = '';
    if (pages[pages.length - 2]) {
      u = pages[pages.length - 2].$page.fullPath;
    }
    url = url || u;
    const menu = useMenu();
    if (menu.menuList.length) {
      const currentMenu = getTreeItem(menu.menuList, url, { key: 'path' });
      if (currentMenu) {
        cache.set('currentMenuId', currentMenu.id);
      } else {
        cache.set('currentMenuId', '');
      }
    }
    // const path = url.split('?')[0];
    // let needLoginPages: string[] = [];
    // // 为了防止开发时出现BUG，这里每次都获取一下。生产环境可以移到函数外，性能更好
    // if (isDev) {
    //   needLoginPages = getNeedLoginPages();
    // } else {
    //   needLoginPages = _needLoginPages;
    // }
    // console.log(needLoginPages.includes(path));

    // if (needLoginPages.includes(path)) {
    //   const isLogin = isLogined();
    //   if (isLogin) {
    //     return true;
    //   }
    //   const redirectRoute = `${loginRoute}?redirect=${encodeURIComponent(url)}`;
    //   uni.navigateTo({ url: redirectRoute });
    //   return false;
    // }
    return true;
  },
};

export const routeInterceptor = {
  install() {
    uni.addInterceptor('navigateTo', navigateToInterceptor);
    uni.addInterceptor('navigateBack', navigateToInterceptor);
    uni.addInterceptor('reLaunch', navigateToInterceptor);
    uni.addInterceptor('redirectTo', navigateToInterceptor);
    uni.addInterceptor('switchTab', navigateToInterceptor);
  },
};
